package collection.mymap.concurrent;


import java.util.HashMap;
import java.util.Iterator;
import java.util.concurrent.ConcurrentHashMap;

/**
 * ConcurrentHashMap弱一致性主要是为了提升效率，是一致性与效率之间的一种权衡，HashMap强一致性迭代器
 * 当创建迭代器后，其他线程删除了该元素时候并不会抛出java.util.ConcurrentModificationException异常，
 * 能够保持创建迭代器后的元素被正确的Iterator.next()出来。例如ConcurrentHashMap就是弱一致性迭代器，HashMap就是强一致性迭代器。
 *
 */
@SuppressWarnings("unused")
public class ConsistentIterationMap {

    public static void main(String[] args) {
		// HashMap<String, String> map = new HashMap<>();
        ConcurrentHashMap<String, String> map = new ConcurrentHashMap<>();
        map.put("people1", "张三");
        map.put("people2", "李四");
        map.put("people3", "王五");
        map.put("people4", "赵六");

        // ConcurrentHashMap弱一致性的迭代器，不会抛出ConcurrentModificationException
        Iterator<String> it = map.values().iterator();
        new Thread(() -> map.remove("people2")).start();
        while(it.hasNext()){
            System.out.println(it.next());
        }
    }
}
